package main.leetcode.clockin.October;

import main.datastruc.TreeNode;

/**
 * 530. 二叉搜索树的最小绝对差
 *
 * <p>给你一棵所有节点为非负值的二叉搜索树，请你计算树中任意两节点的差的绝对值的最小值。
 *
 * <p>提示：树中至少有 2 个节点。
 *
 * @see main.leetcode.primary.from701to800.ex783 迭代解法
 */
public class day12 {
    private int res = Integer.MAX_VALUE;
    private TreeNode pre;

    public static void main(String[] args) {
        System.out.println(
                new day12()
                        .getMinimumDifference(
                                TreeNode.creCmpBTree(new int[] {5, 3, 7, 1, 4, 6, 8})));
    }

    public int getMinimumDifference(TreeNode root) {
        dfs(root);
        return res;
    }

    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        dfs(root.left);
        if (pre != null) {
            res = Math.min(res, root.val - pre.val);
        }
        pre = root;
        dfs(root.right);
    }
}
